/*
 *  Copyright (c) 2013.
 *  * 游戏服务器核心代码编写人陈磊拥有使用权
 *  * 联系方式：E-mail:13638363871@163.com ;qq:502959937
 *  * 个人博客主页：http://my.oschina.net/chenleijava
 */

/**
 * 
 */
package com.dc.gameserver.hardCode.structure;

/**
 * 整数与Enum的互相转换类
 * 
 */
public class EnumTransform {

	/**
	 * 整数转化为Enum<br>
	 * 转化规则： <li>如果enumType是IIntegerEnum，getValue跟输入整数比较</li> <li>
	 * 如果是Enum，ordinal跟输入整数比较</li>
	 * 
	 * @param <T>
	 * @param enumType
	 *            枚举类型
	 * @param value
	 *            整数值
	 * @return 返回与enumType匹配的enum，否则返回null
	 */
	public static <T extends Enum<T>> T integer2Enum(Class<T> enumType,
			int value) {
		if (enumType.isEnum()) {
			T[] ts = enumType.getEnumConstants();
			boolean isIntegerEnum = IIntegerEnum.class
					.isAssignableFrom(enumType);
			for (T t : ts) {
				if (isIntegerEnum) {
					IIntegerEnum ie = (IIntegerEnum) t;
					if (ie.getValue() == value) {
						return t;
					}
				} else {
					Enum<?> e = t;
					if (e.ordinal() == value) {
						return t;
					}
				}
			}
		}
		return null;
	}
	

	/**
	 * 字符串value转化为Enum<br>
	 * 转化规则： <li>如果enumType是IIntegerEnum，getValue跟输入字符创值比较</li>
	 * 
	 * @param <T>
	 * @param enumType
	 *            枚举类型
	 * @param value  字符创值
	 * @return 返回与enumType匹配的enum，否则返回null
	 */
	public static <T extends Enum<T>> T string2Enum(Class<T> enumType,
			String value) {
		if (enumType.isEnum()) {
			T[] ts = enumType.getEnumConstants();
			boolean isStringEnum = IStringEnum.class
					.isAssignableFrom(enumType);
			for (T t : ts) {
				if (isStringEnum) {
					IStringEnum se = (IStringEnum) t;
					if (se.getValue().equals(value)) {
						return t;
					}
				}
			}
		}
		return null;
	}
}
